16. Python 中的向量

Python 中的向量

在Python中,您可以用列表来表示一个向量。因此,像
\begin{bmatrix}5, 9, 10, 2, 20\end{bmatrix}
这样的向量可以表示如下:

myvector = [5, 9, 10 2, 20]

向量索引

你可以使用索引访问向量内部的值。本例中,第一个值 5 可用以下方式访问:

myvector[0]

第二个值:

myvector[1]

诸如此类。

赋值给向量

如果你想改变向量中的值,你可以使用下面的语法:

myvector[3] = 19

这样,我们就把第四个元素从 20 变为了 19。

要将值添加到向量的末尾,可以使用 .append() 方法:

myvector = [5, 9, 2, 20]
myvector.append(18)

结果向量为 [5, 9, 2, 20, 18]。

Python 中的向量数学

使用卡尔曼滤波器方程时,你需要熟悉一些向量运算:

  • 向量加法

  • 标量乘法

  • 点积

向量加法

要将两个向量加在一起,请按元素将它们逐个相加。例如,

\mathbf{v_1} = [a, b, c, d]

\mathbf{v_2} = [w, x, y, z]

这两个向量的和为:

\mathbf{v_1} + \mathbf{v_2} = [a + w, b + x, c + y, d + z]

假设你知道车辆的当前状态为: \mathbf{x} = [x, y, v_x, v_y]

如果你知道车辆位置和速度的变化,就可以使用向量加法来得出新的状态向量。你会在向量代码练习中练习相关编程技巧。

代码中的向量加法

如何使用 Python 执行矢量加法?通常,for 循环对于访问 Python 列表中的值非常有用:

for i in range(len(v1)):
    v1[i]

可以访问 v1,每次一个元素。因此,你可以获取 v1 和 v2 的每个值,将它们相加,然后将每个和添加到一个新的向量,如:

# 初始化空向量
vsum = []

# 使用 for 循环取一个值的总和,然后将其附加到 vsum
for ....
      .....
      vsum.append(value)

我们没有显示完整答案,因为你需要通过编程练习中自己完成答案。

标量乘法

标量乘法是指将一个向量中的每个元素乘以一个常量。

下面是一个完整的例子。

\mathbf{v} = [a, b, c, d] ,则 5\mathbf{v} = [5a, 5b, 5c, 5d]

在编码练习部分,你还有机会练习标量乘法。思考一下,如何使用 for 循环和 append 方法进行标量乘法编程。

标量乘法用例可能使用不同的测量单位。例如,如果你的状态测量单位是米,则可以使用标量乘法将其转换为英尺。准备向量编程练习一展身手吧!

点积

两个向量的点积对于矩阵乘法非常重要。设

\mathbf{v_1} = [a, b, c, d]

\mathbf{v_2} = [w, x, y, z]

则点积为

\mathbf{v_1 \cdot v_2} = aw+ bx + cy + dz

这是 for 循环应用的又一个例子。在下一节的练习中,你会学习如何编写点积。

通过编程练习中,你会学会如何应用点积,并了解它为什么很有用。

小结

进行编程练习之前,你需要掌握以下 Python 知识/技能:

  • 向量赋值 - myvector = [5, 9, 10 2, 20]
  • 访问某个值 - myvector[3]
  • 变更某个值 - myvector[3] = 15
  • 将某个值附在列表末尾 - myvector.append(6)
  • 最后,使用 for 循环访问并操作向量:
for i in range(len(myvector)):
    myvector[i]

请点击本 链接 进一步了解 Python 列表的其他相关方法。尽管你在练习时不会用到这些方法,但它们的确很有用。

接下来,你将在 Python 中练习向量编程。